package com.qf.controller;

import com.qf.pojo.User;
import com.qf.pojo.UserList;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * @author fy
 * @version V1.0
 * @Project workspace
 * @Package com.qf.controller
 * @Description:
 * @Date 2022/6/7 22:34
 */
@Controller
@RequestMapping("/Param")
public class ParamController {

    /**
     *演示springMvc默认支持的接收参数类型
     *              默认支持的参数就是可以加载方法上，也可以不加，可以按照自己的需要添加删除
     *              HttpServletRequest,HttpSession,HttpServletResponce,Model
     *如果controller方法返回String字符串，那么就认为这个字符串是页面的路径，会自动走视图解析器
     * 拼接视图解析器中的前缀和后缀组装成完整的路径
     */
    @RequestMapping("/test1")
    public String test(HttpServletRequest request, Model model){

        String id = request.getParameter("id");
        String name = request.getParameter("name");

        System.out.println("=======id========"+id);
        System.out.println("========name========"+name);
        //相当于request的setAttribute方法，将数据放到请求域中带到页面展示
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到hello页面
        return "hello";


    }

    @RequestMapping("/test2")
    public String test2(Integer id , String name, Model model){

        System.out.println("=======id========"+id);
        System.out.println("========name========"+name);
        //相当于request的setAttribute方法，将数据放到请求域中带到页面展示
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到hello页面
        return "hello";


    }

    /**
     * 接收pojo实体类属性的参数
     * 使用：浏览器传入参数过多，可以将这些参数封装成实体类来进行接收
     * @param user
     * @param model
     * @return
     */
    @RequestMapping("/test3")
    public String test3(User user, Model model){

        System.out.println("=======user========"+user);
        //相当于request的setAttribute方法，将数据放到请求域中带到页面展示
        model.addAttribute("user", user);

        //指定返回数据并跳转到hello页面
        return "hello";


    }

    /**
     * 接受数组类型参数
     *      一般页面中表单使用post方式提交，那么checkbox复选框提交的内容，一般都是数组
     *      那么要求checkbox的name属性名称，必须等于接受的变量名
     * @param hobby
     * @param model
     * @return
     */
    @RequestMapping("/test4")
    public String test4(String[] hobby, Model model){

        System.out.println("=======hobby========"+hobby);
        //相当于request的setAttribute方法，将数据放到请求域中带到页面展示
        model.addAttribute("hobby", hobby);

        //指定返回数据并跳转到hello页面
        return "hello";


    }

    /**
     * 演示接收list类型参数，一般行编辑需求的时候使用
     * @param list
     * @param model
     * @return
     */
    @RequestMapping("/test5")
    public String test5(UserList list, Model model){

        System.out.println("=======list========"+list);

        //指定返回数据并跳转到hello页面
        return "hello";


    }

    /**
     * 演示接受restful等个的参数
     * 访问路径：http://localhost:8080/类的访问路径/方法访问路径/1/张三
     * @param id
     * @param name
     * @return
     */
    @RequestMapping("/test6/{id}/{name}")
    public String test6(@PathVariable("id") Integer id,
                        @PathVariable("name") String name){

        System.out.println("==============="+id+name);

        //指定返回数据并跳转到hello页面
        return "hello";


    }

    @RequestMapping("/test7")
    public String test7(Integer id, String name, Model model){

        System.out.println("============="+id+"\n"+name);

        model.addAttribute("id", id);
        model.addAttribute("name", name);

        //指定返回数据并跳转到hello页面
        return "forward:/Param/test3";


    }

    @RequestMapping("/test8")
    public String test8(Integer id, String name, Model model){

        System.out.println("============="+id+"\r"+name);

        model.addAttribute("id", id);
        model.addAttribute("name", name);

        //指定返回数据并跳转到hello页面
        return "redirect:http://www.baidu.com";


    }

}
